òɾۿûѧϰʹá
ԭַhttps://www.joinquant.com/post/13156

ԭһ˵ʽ鵽ԭĺ߽ۡ


ԭĲԴ£

# 뺯
import jqdata
import talib 

# ʼ趨׼ȵ
def initialize(context):
    # 趨300Ϊ׼
    set_benchmark('000300.XSHG')
    # ̬Ȩģʽ(ʵ۸)
    set_option('use_real_price', True)
    # ݵ־ log.info()
    log.info('ʼʼȫֻһ')
    # ˵orderϵAPIıerror͵log
    # log.set_level('order', 'error')
    
    ### Ʊ趨 ###
    # ƱÿʽʱǣʱӶ֮ʱӶ֮ǧ֮һӡ˰, ÿʽӶͿ5Ǯ
    set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
    
    ## кreference_securityΪʱĲοģıֻ֣˴'000300.XSHG''510300.XSHG'һģ
      # ǰ
    run_daily(before_market_open, time='before_open', reference_security='000300.XSHG') 
      # ʱ
    run_daily(market_open, time='open', reference_security='000300.XSHG')
      # ̺
    run_daily(after_market_close, time='after_close', reference_security='000300.XSHG')
    
## ǰк     
def before_market_open(context):
    # ʱ
    log.info('ʱ(before_market_open)'+str(context.current_dt.time()))

    # ΢ŷϢģ⽻ף΢Ч
    send_message('õһ~')

    # ҪĹƱƽУg.Ϊȫֱ
    g.security = '600519.XSHG'
    
## ʱк
def market_open(context):
    log.info('ʱ(market_open):'+str(context.current_dt.time()))
    security = g.security
    # ȡƱ̼
    h= attribute_history(security, 25, '1d', ['high','low','close'])
    
    #ȡʽ
    cash=context.portfolio.available_cash
    
    #㲼ִϹ죬й죬¹
    upper,middle,lower=talib.BBANDS(
        h['close'].values,
        timeperiod=20,
        nbdevup=2,
        nbdevdn=2,
        matype=0)
    #ȡǰλϢ   
    current_position=context.portfolio.positions[security].amount
    
    #ȡǰɼ
    current_price=h['close'][-1]
    
    if current_price>upper[-1] and current_position>=0:
        order_target_value(security,cash)
        
    elif current_price<lower[-1] and current_position <=0:
        order_value(security,0)
        
    record(upper=upper[-1],
    lower=lower[-1],
    mean=middle[-1],
    price=current_price,
    position_size=current_position)
    
    
    
    
    
    
    
    
    
    
    
    
## ̺к  
def after_market_close(context):
    log.info(str('ʱ(after_market_close):'+str(context.current_dt.time())))
    #õгɽ¼
    trades = get_trades()
    for _trade in trades.values():
        log.info('ɽ¼'+str(_trade))
    log.info('һ')
    log.info('##############################################################')
